package com.hospital.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hospital.entity.Registration;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 挂号服务接口
 *
 * @author Hospital Management System
 */
public interface RegistrationService extends IService<Registration> {

    /**
     * 获取医生的挂号信息
     */
    List<Registration> getDoctorRegistrations(String date);

    /**
     * 获取挂号列表（管理员用）
     * @param keyword 关键词
     * @param status 状态
     * @param type 类型
     * @param appointmentDate 预约日期
     * @param departmentId 科室ID
     * @param page 页码
     * @param size 每页大小
     * @return 分页结果
     */
    Map<String, Object> getRegistrations(String keyword, Integer status, Integer type, 
                                       LocalDate appointmentDate, Long departmentId,
                                       Integer page, Integer size);

    /**
     * 用户预约挂号
     */
    void makeAppointment(Registration registration);

    /**
     * 取消挂号
     */
    void cancelRegistration(Long registrationId);

    /**
     * 获取用户的挂号记录
     */
    List<Registration> getUserRegistrations();

    /**
     * 填充挂号记录的关联信息（患者姓名、医生姓名、科室名称）
     * @param registrations 挂号记录列表
     */
    void fillRelatedInfo(List<Registration> registrations);

    /**
     * 统计今日挂号数
     */
    long countTodayRegistrations();

    /**
     * 计算挂号增长率（与昨日相比）
     */
    double calculateRegistrationGrowth();

    /**
     * 获取挂号趋势数据
     */
    Map<String, Object> getRegistrationTrend(LocalDate startDate, LocalDate endDate);

    /**
     * 获取科室就诊分布数据
     */
    List<Map<String, Object>> getDepartmentDistribution();

    /**
     * 获取实时挂号数据
     */
    List<Map<String, Object>> getRealtimeRegistrations();
} 